home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 September / PCWorld_2006-09_cd.bin / v cisle / mpcl / mplayerc.exe / FILE / 700 < prev    next >
Text File  |  2006-03-20  |  2KB  |  106 lines

  1.  
  2. sampler s0 : register(s0);
  3. sampler s1 : register(s1);
  4. sampler s2 : register(s2);
  5. sampler s3 : register(s3);
  6. sampler s4 : register(s4);
  7.  
  8. float4 p0  : register(c0);
  9. float2 dxdy : register(c1);
  10. float2 dx : register(c2);
  11. float2 dy : register(c3);
  12.  
  13. #define    A _The_Value_Of_A_Is_Set_Here_
  14.  
  15. // none of the resizers here can be used for 1:1 mapping! 
  16. // tex * size won't be 0, 1, 2, 3, .. as you might expect, but something like 0, 0.999, 2.001, 2.999, ...
  17. // this means when the fractional part becomes 0.999 we will be interpolating with the wrong value!!!
  18.  
  19. struct PS_INPUT
  20. {
  21.     float2 t0 : TEXCOORD0;
  22.     float2 t1 : TEXCOORD1;
  23.     float2 t2 : TEXCOORD2;
  24.     float2 t3 : TEXCOORD3;
  25.     float2 t4 : TEXCOORD4;
  26. };
  27.  
  28. float4 main_bilinear(PS_INPUT input) : COLOR
  29. {
  30.     float2 dd = frac(input.t4);
  31.  
  32.     float4 c = lerp(
  33.         lerp(tex2D(s0, input.t0), tex2D(s1, input.t1), dd.x),
  34.         lerp(tex2D(s2, input.t2), tex2D(s3, input.t3), dd.x),
  35.         dd.y);
  36.         
  37.     return c;
  38. }
  39.  
  40. static float4x4    tco =
  41. {
  42.     0, A, -2*A, A,
  43.     1, 0, -A-3, A+2,
  44.     0, -A, 2*A+3, -A-2,
  45.     0, 0, A, -A
  46. };
  47.  
  48. float4 taps(float t)
  49. {
  50.     return mul(tco, float4(1, t, t*t, t*t*t));
  51. }
  52.  
  53. float4 SampleX(float4 tx, float2 t0)
  54. {
  55.     return
  56.         mul(tx,
  57.             float4x4(
  58.                 tex2D(s0, t0 - dx),
  59.                 tex2D(s0, t0),
  60.                 tex2D(s0, t0 + dx),
  61.                 tex2D(s0, t0 + dx + dx)
  62.             )
  63.         );
  64. }
  65.  
  66. float4 SampleY(float4 tx, float4 ty, float2 t0)
  67. {
  68.     return
  69.         mul(ty,
  70.             float4x4(
  71.                 SampleX(tx, t0 - dy),
  72.                 SampleX(tx, t0),
  73.                 SampleX(tx, t0 + dy),
  74.                 SampleX(tx, t0 + dy + dy)
  75.             )
  76.         );
  77. }
  78.  
  79. float4 main_bicubic1pass(PS_INPUT input) : COLOR
  80. {
  81.     float2 dd = frac(input.t1);
  82.     return SampleY(taps(dd.x), taps(dd.y), input.t0);
  83.     // return SampleY(tex1D(s1, dd.x), tex1D(s1, dd.y), input.t0);    
  84. }
  85.  
  86. float4 Sample(float4 t, PS_INPUT input)
  87. {
  88.     return
  89.         mul(t, 
  90.             float4x4(
  91.                 tex2D(s0, input.t0),
  92.                 tex2D(s1, input.t1),
  93.                 tex2D(s2, input.t2),
  94.                 tex2D(s3, input.t3)
  95.             )
  96.         );
  97. }
  98.  
  99. float4 main_bicubic2pass(PS_INPUT input) : COLOR
  100. {
  101.     float2 dd = frac(input.t4);
  102.     return Sample(taps(dd.x), input);
  103.     // return Sample(tex1D(s4, dd.x), input);    
  104. }
  105.  
  106.